0%

Thinkphp5-SQL注入漏洞分析

审计环境

环境搭建卡了挺久的,这里记录一下。

  • 多版本的php

    如果是Ubuntu,参考以下代码

    1
    2
    3
    4
    5
    6
    sudo add-apt-repository ppa:ondrej/php    //添加仓库源
    sudo apt-get update //更新源
    sudo apt-get install php5.6 //安装其他版本php
    sudo apt-get install php5.6-xdebug //安装必须的插件
    sudo apt-get install php5.6-mysql
    ...

    如果是kali,参考一下代码

    1
    2
    3
    sudo apt -y install lsb-release apt-transport-https ca-certificates 
    sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
    echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/php.list
  • composer

    1
    2
    3
    4
    5
    6
    php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
    php composer-setup.php
    mv composer.phar /usr/local/bin/composer
    //记得加环境变量
    //换源
    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  • 安装tp5源码

    这里以thinkphp v5.0.15为例

    1
    2
    3
    4
    5
    6
    7
    8
    cd /var/www/
    composer create-project --prefer-dist topthink/think=5.0.15 tp5015
    cd tp5015
    vim composer.json //将"topthink/framework":"5.0.*" >>"topthink/framework":"5.0.15"
    composer update //可能会报php插件缺失,缺啥装啥。
    composer create-project topthink/framework=5.0.15 thinkphp //这个"thinkphp"名字不能改,可能会报依赖错误,按照提示修改thinkphp/composer.json
    cd thinkphp
    composer update

    至此源码全部下载下来了。

  • Apache

    首先选择合适的php版本(>5.4),我这里因为依赖问题所以选择7.0

    1
    2
    3
    a2dismod php5.6  //关闭php5.6
    a2enmod php7.0 //开启php7.0
    systemctl restart apache2 //重启生效

    创建虚拟目录 /etc/apache2/sites-available/000-default.conf

    image-20210320163405433

    增加监听端口 /etc/apache2/ports.conf

    image-20210320163814936

    创建日志目录(没有会导致apache服务重启失败)

    1
    2
    mkdir /var/log/apache2/tp5015
    systemctl restart apache2

    大致的环境就是这样搭建的。遇到特殊情况就举一反三吧 - -!

    在进行漏洞分析前我们先来了解下tp的路由有两种模式

    1
    2
    3
    http://serverName/index.php/模块/控制器/操作/[参数名/参数值...]
    如果不支持PATHINFO的服务器可以使用兼容模式访问如下:
    http://serverName/index.php?s=/模块/控制器/操作/[参数名/参数值...]

SQL注入1

  • 漏洞分析

    漏洞存在于 Builder 类的 parseData 方法中。由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。漏洞影响版本: 5.0.13<=ThinkPHP<=5.0.155.1.0<=ThinkPHP<=5.1.5

    application/index/controller/Index.php 文件代码设置如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    namespace app\index\controller;

    class Index
    {
    public function index()
    {
    $username = request()->get('username/a');
    db('users')->insert(['username' => $username]);
    return 'Update success';
    }
    }

    application/database.php 文件中配置数据库相关信息,并开启 application/config.php 中的 app_debugapp_trace 。创建数据库信息如下:

    1
    2
    3
    4
    5
    6
    create database tp5015demo;
    use tp5015demo;
    create table users(
    trueid int primary key auto_increment,
    trueusername varchar(50) not null
    );
  • 漏洞利用

SQL注入2

SQL注入3

SQL注入4

SQL注入5

参考:

https://github.com/Mochazz/ThinkPHP-Vuln

-------------本文结束感谢您的阅读-------------